import { RouteStore } from '@/stores/route';
// 引入 views 文件夹下所有 vue 文件
const modules = import.meta.glob('@/views/**/*.vue');
import { Notification } from '@arco-design/web-vue';
import router from '@/routers/index';
import { LOGIN_ROUTE_NAME } from '@/routers/constants';

/**
 * 初始化动态路由
 */
export const initDynamicRouter = async () => {
	const routeStore = RouteStore();
	try {
		// 1. 从后端加载路由信息
		await routeStore.initRoutesFormServer();
		// 2. 判断当前用户有没有菜单权限
		if (!routeStore.routeList.length) {
			Notification.error({ title: '系统提示', content: '当前账号无任何菜单权限，请联系系统管理员' });
			await router.replace(LOGIN_ROUTE_NAME);
			return Promise.reject('No permission');
		}
		const flatRouteList = routeStore.getFlatRouteList;
		// 3. 添加动态路由 (getFlatArr 方法把菜单全部处理成一维数组，方便添加动态路由)
		flatRouteList.forEach((item) => {
			if (item.children) delete item.children;
			if (item.component) {
				item.component = modules['/src/views' + item.component + '.vue'];
			}
			router.addRoute('layout', item);
		});
	} catch (error) {
		// 当菜单请求出错时，重定向到登陆页
		// await router.replace(LOGIN_ROUTE_NAME);
		return Promise.reject(error);
	}
};
